package org.example.student_system.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.example.student_system.interceptor.Interceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    // 1. 配置跨域过滤器（解决CORS问题）
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        // 允许前端域名（替换为你的前端实际地址，如 http://localhost:5174）
        config.addAllowedOrigin("http://localhost:5174");
        config.addAllowedOrigin("http://172.24.69.128/");
        config.addAllowedOrigin("http://test9527.w1.luyouxia.net/");
        // 允许携带凭证（如Cookie、Token）
        config.setAllowCredentials(true);
        // 允许所有请求方法（GET、POST、OPTIONS等）
        config.addAllowedMethod("*");
        // 允许所有请求头
        config.addAllowedHeader("*");
        // 允许前端访问的响应头（可选，按需添加）
        config.addExposedHeader("Authorization");
        // 预检请求缓存时间（减少重复预检请求，单位：秒）
        config.setMaxAge(3600L);

        // 配置跨域路径（所有接口都允许跨域）
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        return new CorsFilter(source);
    }

    // 2. 配置拦截器
    @Bean
    public Interceptor myInterceptor() {
        return new Interceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor())
                .addPathPatterns("/**") // 拦截所有请求
                .excludePathPatterns(
                        "/login",
                        "/register",
                        // 关键：排除跨域预检请求（OPTIONS方法），否则拦截器会阻止预检
                        "/**/*.html",
                        "/**/*.js",
                        "/**/*.css", // 如果有静态资源，也需要排除
                        // 关键：排除 Knife4j 相关路径
                        "/doc.html/**", // 文档首页
                        "/webjars/**", // Knife4j 依赖的前端资源
                        "/v3/api-docs/**",  // OpenAPI 3.0 文档数据
                        "/favicon.ico"  // 网站图标
                );
    }

    // 3. 配置Mybatis-Plus分页查询插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }


}